package com.hnevc.androidui9;

import android.util.Xml;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by Administrator on 2018/6/21.
 */

public class WeatherService {
    //使用PULL方式解析XML文件
    public static List<WeatherInfo> getInfosFromXML(InputStream is)
            throws XmlPullParserException, IOException {
        //创建一个解释器
        XmlPullParser parser = Xml.newPullParser();
        parser.setInput(is,"utf-8");//载入数据

        //定义存储解析结果的链表weatherInfos
        List<WeatherInfo> weatherInfos = null;
        WeatherInfo weatherInfo = null;

        //开始解析
        int type = parser.getEventType();
        while(type != XmlPullParser.END_DOCUMENT){
            switch (type){
                case XmlPullParser.START_TAG:
                    if(parser.getName().equals("infos")){
                        weatherInfos = new ArrayList<>();
                    }
                    if(parser.getName().equals("city")){
                        weatherInfo = new WeatherInfo(); //遇到city开始标签，创建weatherinfo对象
                        String id = parser.getAttributeValue(0);//获取id属性
                        weatherInfo.setId(id);//将id属性保存到对象中
                    }
                    if(parser.getName().equals("temp")){
                        String temp = parser.nextText();//获取当前标签的文字信息
                        weatherInfo.setTemp(temp);//将温度信息添加到weatherinfo中
                    }
                    if(parser.getName().equals("name")){//解析城市的名字信息
                        String name = parser.nextText();
                        weatherInfo.setName(name);
                    }
                    break;
                case XmlPullParser.END_TAG:
                    if(parser.getName().equals("city")){
                        //一个城市的信息已经解析完成,将城市对象加入链表
                        weatherInfos.add(weatherInfo);
                    }
                    break;
            }
            type = parser.next();//读取下一个标签
        }
        return weatherInfos;
    }
}
